home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_gawk.idb / usr / freeware / share / awk / group.awk.z / group.awk
Text File  |  2002-07-08  |  2KB  |  88 lines

  1. # group.awk --- functions for dealing with the group file
  2. #
  3. # Arnold Robbins, arnold@gnu.org, Public Domain
  4. # May 1993
  5. # Revised October 2000
  6.  
  7. BEGIN    \
  8. {
  9.     # Change to suit your system
  10.     _gr_awklib = "/usr/freeware/libexec/awk/"
  11. }
  12.  
  13. function _gr_init(    oldfs, oldrs, olddol0, grcat,
  14.                              using_fw, n, a, i)
  15. {
  16.     if (_gr_inited)
  17.         return
  18.  
  19.     oldfs = FS
  20.     oldrs = RS
  21.     olddol0 = $0
  22.     using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
  23.     FS = ":"
  24.     RS = "\n"
  25.  
  26.     grcat = _gr_awklib "grcat"
  27.     while ((grcat | getline) > 0) {
  28.         if ($1 in _gr_byname)
  29.             _gr_byname[$1] = _gr_byname[$1] "," $4
  30.         else
  31.             _gr_byname[$1] = $0
  32.         if ($3 in _gr_bygid)
  33.             _gr_bygid[$3] = _gr_bygid[$3] "," $4
  34.         else
  35.             _gr_bygid[$3] = $0
  36.  
  37.         n = split($4, a, "[ \t]*,[ \t]*")
  38.         for (i = 1; i <= n; i++)
  39.             if (a[i] in _gr_groupsbyuser)
  40.                 _gr_groupsbyuser[a[i]] = \
  41.                     _gr_groupsbyuser[a[i]] " " $1
  42.             else
  43.                 _gr_groupsbyuser[a[i]] = $1
  44.  
  45.         _gr_bycount[++_gr_count] = $0
  46.     }
  47.     close(grcat)
  48.     _gr_count = 0
  49.     _gr_inited++
  50.     FS = oldfs
  51.     if (using_fw)
  52.         FIELDWIDTHS = FIELDWIDTHS
  53.     RS = oldrs
  54.     $0 = olddol0
  55. }
  56. function getgrnam(group)
  57. {
  58.     _gr_init()
  59.     if (group in _gr_byname)
  60.         return _gr_byname[group]
  61.     return ""
  62. }
  63. function getgrgid(gid)
  64. {
  65.     _gr_init()
  66.     if (gid in _gr_bygid)
  67.         return _gr_bygid[gid]
  68.     return ""
  69. }
  70. function getgruser(user)
  71. {
  72.     _gr_init()
  73.     if (user in _gr_groupsbyuser)
  74.         return _gr_groupsbyuser[user]
  75.     return ""
  76. }
  77. function getgrent()
  78. {
  79.     _gr_init()
  80.     if (++_gr_count in _gr_bycount)
  81.         return _gr_bycount[_gr_count]
  82.     return ""
  83. }
  84. function endgrent()
  85. {
  86.     _gr_count = 0
  87. }
  88.